import { query as queryUsers, queryCurrent } from '../services/user'

export default {
    namespace: 'user',

    state: {
        list: [],
        loading: false,
        currentUser: {},
    },

    effects: {
        * fetch (_, { call, put }) {
            yield put({
                type: 'changeLoading',
                payload: true,
            })
            const response = yield call(queryUsers)
            yield put({
                type: 'save',
                payload: response,
            })
        },
        * fetchCurrent (_, { call, put }) {
            const response = yield call(queryCurrent)
            yield put({
                type: 'saveCurrentUser',
                payload: response,
            })
        },
    },

    reducers: {
        save (state, action) {
            return {
                ...state,
                list: action.payload,
            }
        },
        changeLoading (state, action) {
            return {
                ...state,
                loading: action.payload,
            }
        },
        saveCurrentUser (state, action) {
            return {
                ...state,
                currentUser: action.payload,
            }
        },
        changeNotifyCount (state, action) {
            return {
                ...state,
                currentUser: {
                    ...state.currentUser,
                    notifyCount: action.payload,
                },
            }
        },
    },
}
